"! Info:
Low-level system interface class.
Examples:

"
Object subclass: System [
<category: 'Library-Hardware'>
]

"! "
MetaObject subclass: MetaSystem [
<category: 'Library-Hardware'>
"! Info:
Read an analog sensor port. Returns 0 to 255.
Examples:

"
analogRead: port [
<analogRead port>  ]

"! Info:
Return the battery voltage in millivolts.
Examples:

"
batteryVoltage [
" Battery voltage is fed divided by 2 then fed into 
  3v3 referenced ADC channel. So:
  Vbat_mv = adc/1024 * 3.3 * 2 * 1000
	        = adc * 6600 / 1024 "
^ (System analogRead: 7) * 6600 / 1024.
]

"! Info:
Read a digital input port.
Returns true or false.
Examples:

"
digitalRead: port [
<digitalRead port>  ]

"! "
inMotion [
^ (self motionCommand: 255 value: 0) = 1.
]

"! Info:
Low-level memory read.
Examples:

"
memAt: addr [
<memRead addr>  ]

"! Info:
Low-level memory write.
Examples:

"
memAt: addr put: value [
<memWrite value addr>  ]

"! "
motionCommand: cmd value: value [
<motionCommand cmd value>
]

"! "
playNote: n sample: s channel: c volume: v [
<musicPlayNote c s n v>
]

"! "
setMotor: m velocity: v [
<motorVelocity m v>
]

"! Info:
Low-level sleep function.
Examples:

"
sleep: ms [
| endtime |
endtime := Time sinceStartup millisecondsLater: ms.
[(Time sinceStartup) < endtime] whileTrue: [ 
	self yieldUntil: (endtime milliseconds).
].
]

"! "
yieldUntil: t [
<yieldUntil t>
]

]

